GitHub Documents

This is an R Markdown format used for publishing markdown documents to GitHub. When you click the Knit button all R code chunks are run and a markdown file (.md) suitable for publishing to GitHub is generated.

Including Code

You can include R code in the document as follows:

summary(cars)#0. Cleaning and set-up R----
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00
rm(list = ls())

GEONAMES_USER = "dieghernan"
library(pacman)
## Warning: package 'pacman' was built under R version 3.5.3
p_load(dplyr,
       jsonlite)

library(readxl)
## Warning: package 'readxl' was built under R version 3.5.3
#Find airports----
myflights <- read_excel("flights.xlsx")
tosearch=data.frame(toloc=(sort(append(myflights$start,myflights$end))),
                    stringsAsFactors = F) 
tosearch = tosearch %>% count(toloc) %>% arrange(desc(n)) %>% as.data.frame()
tosearch$tofun = gsub(" ", "+", tosearch$toloc)
tosearch$tofun=ifelse(tosearch$toloc=="San Sebastian",
                      "san+sebastian+es",
                      tosearch$tofun)

airports <- function(place, n = 1, lang = "en") {
  url = paste(
    "http://api.geonames.org/searchJSON?formatted=true&username=",
    GEONAMES_USER,
    "&style=medium&fcode=AIRP&lang=",
    lang,
    "&maxRows=",
    paste(n),
    "&q=",
    place,
    sep = ""
  )
  geonames = fromJSON(url)
  geonames = data.frame(geonames[["geonames"]])
  geonames$search = place
  geonames = geonames %>% select(
    tofun=search,
    toponymName,
    countryCode,
    long=lng,
    lat
  )
  return(geonames)
}


#Return
for (i in 1:nrow(tosearch)) {
  res = airports(tosearch[i, c("tofun")])
  
  row.names(res) <- i
  
  if (i == 1) {
    final = res
  } else {
    final = rbind(final, res)
  }
  rm(res)
}
rm(i)
final$long=as.numeric(final$long)
final$lat=as.numeric(final$lat)
#Some statistics----
#Number times per city----
ndots=left_join(tosearch,final) %>% 
  select(
    name=toloc,
    countryCode,
    Airport=toponymName,
    n,
    long,
    lat
)
## Joining, by = "tofun"
# Leaflet-----
library(leaflet)

map <- leaflet( options = leafletOptions(minZoom = 2)) %>%
  addProviderTiles(providers$CartoDB.DarkMatter,
                   options = list(detectRetina = TRUE,
                                  noWrap = TRUE)) %>%
  setView(-3.56948,  40.49181, zoom = 3) %>%
  setMaxBounds(-180,-90,180,90) %>%
  addCircles(
    data=ndots,
    lng = ~ long,
    lat = ~ lat,
    weight = 5,
    radius =  1000,
    popup = ~ name,
    color = "green"
  )
map
#Connecting Routes
connect=myflights %>% count(start,end) %>% arrange(desc(n))
connect=left_join(connect,
                  ndots %>%
                    select(
                      start=name,
                      long_init=long,
                      lat_init=lat
                    ))
## Joining, by = "start"
connect=left_join(connect,
                  ndots %>%
                    select(
                      end=name,
                      long_end=long,
                      lat_end=lat
                    ))
## Joining, by = "end"
library(geosphere)
## Warning: package 'geosphere' was built under R version 3.5.3
connectflights = gcIntermediate(
  connect[, c("long_init", "lat_init")],
  connect[, c("long_end", "lat_end")],
  n = 1000,
  breakAtDateLine = T,
  sp = T
)
connect$n/(2*max(connect$n))
##  [1] 0.50000000 0.50000000 0.14516129 0.12903226 0.12903226 0.12903226
##  [7] 0.11290323 0.09677419 0.06451613 0.04838710 0.04838710 0.04838710
## [13] 0.03225806 0.03225806 0.03225806 0.03225806 0.03225806 0.01612903
## [19] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [25] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [31] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [37] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [43] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [49] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [55] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [61] 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903 0.01612903
## [67] 0.01612903 0.01612903 0.01612903
map3 <-  addPolylines(map,weight=2*sqrt(connect$n),data = connectflights, opacity = sqrt(connect$n)/5,
                    col="green" ,group = "Flights")

map4 <-   addEasyButton(map3,easyButton(
  icon="fa-globe", title="Zoom to Level 1",
  onClick=JS("function(btn, map){ map.setZoom(1); }")))
map4 <-   addLayersControl(map3,
    overlayGroups = c("Flights"),
    options = layersControlOptions(collapsed = FALSE)
  )
map4
library(leaflet.extras)
## Warning: package 'leaflet.extras' was built under R version 3.5.3
map5 <- addHeatmap(map,data = ndots, intensity = ~ n,
                   radius = 40,max=10, blur=40 )
## Assuming "long" and "lat" are longitude and latitude, respectively
map5

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.